from flask import Flask
import secrets
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager, current_user

db = SQLAlchemy()
# 创建 LoginManager 实例
login_manager = LoginManager()
# 设置未登录用户尝试访问受保护页面时重定向到的登录视图
login_manager.login_view = 'login'

def create_app():
    app = Flask(__name__)

    # 设置SECRET_KEY
    app.config['SECRET_KEY'] = secrets.token_urlsafe(16)

    # 设置数据库URI
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost/library_management'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    # 初始化数据库
    db.init_app(app)
    migrate = Migrate(app, db)

    # 导入并初始化路由
    from .routes import init_routes
    init_routes(app)

    # 创建数据库表（通常放在第一次运行或迁移之后）
    # 注意：在开发环境中，您可能希望在每次请求时都这样做，但在生产环境中，您应该只在迁移后这样做
    with app.app_context():
        from . import models
        db.create_all()

    login_manager.init_app(app)

    return app